package com.Cfeng.XiaohuanChat.util;

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Objects;

/**
 * @author Cfeng
 * @date 2022/8/21
 * 该工具类借助百度创建的服务端应用ak，访问其服务将经纬度转为具体的地址
 */

@Slf4j
public class BaiduMapGeoUtil {
    /**
     * 百度地图调用
     */
    public final static String BAIDU_MAP_AK = "9XhF7VmYyGM3SqyQEZQL9ywvhaC0hGHt";

    /**
     * 根据经纬度得出位置
     * @param longitude 经度
     * @param latitude  纬度
     * @return 位置 String, 封装的json字符串addressInfo
     */
    public static String getAddressInfoByLngAndLat(String longitude, String latitude) {
        String position = ""; //返回的结果对象JSon字符串
        String location = latitude + "," + longitude;
        //百度URL 相关的参数coordtype :bd09ll（百度经纬度坐标）、bd09mc（百度米制坐标）、gcj02ll（国测局经纬度坐标，仅限中国）、wgs84ll（ GPS经纬度）； ak就是访问
        String url ="http://api.map.baidu.com/reverse_geocoding/v3/?ak="+BAIDU_MAP_AK+"&output=json&coordtype=wgs84ll&location="+location;
        //访问baidu的服务，传入ak、coordtype、location
        try {
            String result =  loadUrl(url);
            //使用fastJSON进行对象转化JSON
            JSONObject res = JSONObject.parseObject(result);
            log.info("具体的位置信息: {}" ,res.toString());
            //该对象的status属性为状态码，0为成功，result为数据
            if(Objects.equals("0",String.valueOf(res.get("status")))) {
                //数据对象
                JSONObject data = JSONObject.parseObject(String.valueOf(res.get("result")));
                //AddressComponent对象就是最终封装的位置信息
                position = String.valueOf(data.get("addressComponent"));
                //直接给出详细信息
//                position = String.valueOf(data.get("formatted_address"));
            }
        } catch (Exception e) {
            log.error("未能找到相匹配的经纬度，请检查");
        }
        return position;
    }

    //通过url获取结果String
  private static String loadUrl(String url) {
        StringBuilder stringBuilder = new StringBuilder();

      try {
          //创建链接地址
          URL region = new URL(url);
          //访问链接URL地址
          URLConnection connection = region.openConnection();
          //读取url缓冲字符流
          BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8"));
          //读取流写入字符串
          String inputLine = null;
          //读取到末尾
          while((inputLine = reader.readLine()) != null) {
              stringBuilder.append(inputLine);
          }
          reader.close();
      } catch (Exception e) {
          log.error("出错了：{}",e.getMessage());
      }
      return stringBuilder.toString();
  }
}
